﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;

namespace ErickOrlando.Utilidades.Windows.Controles
{
    /// <summary>
    /// Plantilla de Boton como parte del Estandar SCE,
    /// utilice las propiedad Imagen para cambiar por los distintos tipos de Botón
    /// </summary>
    /// <remarks>Erick Orlando © 2008-2012</remarks>
    [ToolboxItem(true), 
    ToolboxBitmap(typeof(PlantillaBoton), "ErickOrlando.Utilidades.Windows.PlantillaBoton")]
    [DefaultEvent("Click"), 
    Description("Plantilla para los botones estándar SCE © Colaboración de Erick Orlando ® 2008-2012"), 
    Designer(typeof(PlantillaBotonControlDesigner))]
    public partial class PlantillaBoton : DevExpress.XtraEditors.XtraUserControl
    {

        #region Constructores


        public PlantillaBoton()
        {
            InitializeComponent();
            Boton.Click += ClickBoton;
        }
        #endregion

        #region Eventos y Delegados

        public delegate void BotonClick(object sender, EventArgs e);
        public new event BotonClick Click;

        #endregion

        #region Enumeraciones

        public enum TipoBoton
        {
            Buscar = 0,
            BuscarPrompt = 1,
            Agregar = 2,
            Modificar = 3,
            Eliminar = 4
        }

        #endregion

        #region Propiedades

        private TipoBoton m_Imagen;
        [System.ComponentModel.Category("Plantilla"), Description("Especifica la Imagen que se mostrará en el botón")]
        public TipoBoton Imagen
        {
            get
            {
                CambiarImagen(m_Imagen);
                return m_Imagen;
            }
            set
            {
                CambiarImagen(value);
                m_Imagen = value;
            }
        }


        private TextEdit m_CajaTexto;
        [System.ComponentModel.Category("Plantilla"), Description("Especifica el cuadro de Texto que está asociado a este botón")]
        public TextEdit CajaTexto
        {
            get { return m_CajaTexto; }

            set
            {
                m_CajaTexto = value;

                if (value == null)
                    return;

                if (m_Imagen == TipoBoton.BuscarPrompt | m_Imagen == TipoBoton.Buscar)
                {
                    value.KeyUp += EventoTecla;
                }
                else
                {
                    value.KeyUp -= EventoTecla;
                }

            }
        }

        private ButtonEdit m_CajaTextoConBoton;
        [System.ComponentModel.Category("Plantilla"), Description("Especifica el control ButtonEdit que está asociado a este botón")]
        public ButtonEdit CajaTextoConBoton
        {
            get { return m_CajaTextoConBoton; }

            set
            {
                m_CajaTextoConBoton = value;

                if (value == null)
                    return;

                if (m_Imagen == TipoBoton.BuscarPrompt | m_Imagen == TipoBoton.Buscar)
                {
                    value.KeyUp += EventoTecla;
                }
                else
                {
                    value.KeyUp -= EventoTecla;
                }

            }
        }

        #endregion

        #region Métodos Privados

        private void CambiarImagen(TipoBoton img)
        {
            switch (img)
            {
                case TipoBoton.Buscar:
                    Boton.Image = Properties.Resources.buscar;
                    Size = new System.Drawing.Size(35, 27);
                    Boton.Text = string.Empty;
                    break;
                case TipoBoton.BuscarPrompt:
                    Boton.Image = Properties.Resources.buscar_prompt;
                    Size = new System.Drawing.Size(35, 27);
                    Boton.Text = string.Empty;
                    break;
                case TipoBoton.Agregar:
                    Boton.Image = Properties.Resources.db_add;
                    Size = new System.Drawing.Size(100, 24);
                    Boton.Text = "&Agregar";
                    break;
                case TipoBoton.Modificar:
                    Boton.Image = Properties.Resources.editar;
                    Size = new System.Drawing.Size(100, 24);
                    Boton.Text = "&Modificar";
                    break;
                case TipoBoton.Eliminar:
                    Boton.Image = Properties.Resources.db_remove;
                    Size = new System.Drawing.Size(100, 24);
                    Boton.Text = "&Eliminar";
                    break;
            }
        }

        private void ClickBoton(object sender, EventArgs e)
        {
            if (Click != null)
                Click(sender, e);
            //Cambiamos el Texto a negrita
            if (CajaTexto != null)
                CajaTexto.Font = new Font(CajaTexto.Font, FontStyle.Bold);

            if (CajaTextoConBoton != null)
                CajaTextoConBoton.Font = new Font(CajaTextoConBoton.Font, FontStyle.Bold);
        }

        private void EventoTecla(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.Handled = true;
                ClickBoton(this, new System.EventArgs());
            }
        }

        #endregion
    }
}
